package com.cari.oa.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import com.cari.oa.domain.SysLoginLogEntity;
import com.cari.oa.util.StrUtils;

@Repository
public class SysLoginLogDao extends BaseDao<SysLoginLogEntity> {

    /**
     * 分页查询系统操作日志
     * @param userName 用户名称
     * @param ip ip
     * @param startTime 查询开始时间
     * @param endTime 查询结束时间
     * @param page 当前页
     * @param size 每页条数
     * @return 分页实体
     */
    public List<SysLoginLogEntity> getPage(String userName, String ip, Date startTime, Date endTime, int page, int size) {
    	List<Object> params = new ArrayList<Object>();

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("from SysLoginLogEntity l where 1=1 ");

        if(StrUtils.isNotEmpty(userName)) {
            stringBuilder.append("and l.userName like ? ");
            params.add("%" + userName + "%");
        }

        if(StrUtils.isNotEmpty(ip)) {
            stringBuilder.append("and l.ip like ? ");
            params.add("%" + ip + "%");
        }
        
        if(startTime != null) {
            stringBuilder.append("and l.createTime >= ? ");
            //params.add("'" + DateUtils.date2Str(startTime, DateUtils.NORMAL_FORMAT) + "'");
            params.add(startTime);
        }
        
        if(endTime != null) {
            stringBuilder.append("and l.createTime <= ? ");
            //params.add("'" + DateUtils.date2Str(endTime, DateUtils.NORMAL_FORMAT) + "'");
            params.add(endTime);
        }

        return getPage(stringBuilder.toString(), page, size, params.toArray());
    }
    
    /**
     * 查询的记录数
     * @param userName 用户名称
     * @param ip ip
     * @param startTime 查询开始时间
     * @param endTime 查询结束时间
     * @return 记录数
     */
    public long getCount(String userName, String ip, Date startTime, Date endTime) {
    	List<Object> params = new ArrayList<Object>();

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("select count(*) from SysLoginLogEntity l where 1=1 ");
        
        if(StrUtils.isNotEmpty(userName)) {
            stringBuilder.append("and l.userName like ? ");
            params.add("%" + userName + "%");
        }

        if(StrUtils.isNotEmpty(ip)) {
            stringBuilder.append("and l.ip like ? ");
            params.add("%" + ip + "%");
        }
        
        if(startTime != null) {
            stringBuilder.append("and l.createTime >= ? ");
            //params.add("'" + DateUtils.date2Str(startTime, DateUtils.NORMAL_FORMAT) + "'");
            params.add(startTime);
        }
        
        if(endTime != null) {
            stringBuilder.append("and l.createTime <= ? ");
            //params.add("'" + DateUtils.date2Str(endTime, DateUtils.NORMAL_FORMAT) + "'");
            params.add(endTime);
        }
        
        Query query = getSession().createQuery(stringBuilder.toString());
        for (int i = 0; i < params.size(); i++) {
            query.setParameter(i, params.get(i));
        }
        return (Long)query.uniqueResult();
    }	
}
